import { NestFactory } from '@nestjs/core'
import { AppModule } from './app.module'
import { VersioningType, VERSION_NEUTRAL } from '@nestjs/common'
import { TransformInterceptor } from './common/interceptors/transform.interceptor'
import { AllExceptionsFilter } from './common/exceptions/base.exception.filter'
import { HttpExceptionFilter } from './common/exceptions/http.exception.filter'
import { generateDocument } from './doc'

// declare const module: any

async function bootstrap() {
  const app = await NestFactory.create(AppModule)

  // 接口版本化管理
  // app.enableVersioning({
  //   defaultVersion: [VERSION_NEUTRAL, '1'],
  //   type: VersioningType.URI,
  // })

  // 添加全局响应数据格式化拦截器
  app.useGlobalInterceptors(new TransformInterceptor())

  // 添加全局异常处理
  app.useGlobalFilters(new AllExceptionsFilter(), new HttpExceptionFilter())

  // 添加swagger 接口文档
  generateDocument(app)

  // // 添加webpack热模块更新  开启热更新，打包到dist文件夹中是一个文件，无法找到mongo.entity和mysql.entity结尾文件
  // if (module.hot) {
  //   module.hot.accept()
  //   module.hot.dispose(() => app.close())
  // }

  await app.listen(3000)
}
bootstrap()
